導讀:https大大改善了網站的安全性,減少了流量劫持,越安全的網站對用戶越有益。即便是https改造有些難度,也應當大力推進https的改造。下面我們特邀了去哪網的同學進行了關于https改
發表日期:2019-03-19
文章編輯:興田科技
瀏覽次數:9226
標簽:
https大大改善了網站的安全性,減少了流量劫持,越安全的網站對用戶越有益。即便是https改造有些難度,也應當大力推進https的改造。下面我們特邀了去哪網的同學進行了關于https改造的分享!
本文作者:去哪兒高級工程師歐陽何順、去哪兒網SEO負責人 呂令建
一、理解HTTpS
先不聊HTTp和HTTpS的區別,從聊天軟件說起,假設我們要實現A能發一個hello消息給B,如果我們要實現這個聊天軟件,只考慮安全性問題,要實現A發給B的hello消息包,即使被中間人攔截到了,也無法得知消息的內容。
那么,如何做到真正的安全呢?目標是A與B通信的內容,有且只有A和B有能力看到通信的真正內容,為了防止內容被第三方竊取,發送方可以通過密鑰S對聊天內容進行加密,接收方在收到聊天內容之后,再用密鑰S解密聊天內容,只要密鑰不公開給第三者,同時密鑰S足夠安全,我們就可以保證只有A與B知道聊天內容。
二、HTTpS的優缺點
優點
SEO方面:谷歌曾在2014年8月份調整搜索引擎算法,并稱“比起同等HTTp網站,采用HTTpS加密的網站在搜索結果中的排名將會更高”。
安全性:盡管HTTpS并非絕對安全,掌握根證書的機構、掌握加密算法的組織同樣可以進行中間人形式的攻擊,但HTTpS仍是現行架構下最安全的解決方案,主要有以下幾個好處:
使用HTTpS協議可認證用戶和服務器,確保數據發送到正確的客戶機和服務器;
HTTpS協議是由SSL+HTTp協議構建的可進行加密傳輸、身份認證的網絡協議,要比http協議安全,可防止數據在傳輸過程中不被竊取、改變,確保數據的完整性;
HTTpS是現行架構下最安全的解決方案,雖然不是絕對安全,但它大幅增加了中間人攻擊的成本。
缺點
SEO方面:據ACM CoNEXT數據顯示,使用HTTpS協議會使頁面的加載時間延長近50%,增加10%到20%的耗電,此外,HTTpS協議還會影響緩存,增加數據開銷和功耗,甚至已有安全措施也會受到影響也會因此而受到影響。
經濟方面:SSL證書需要錢,功能越強大的證書費用越高,個人網站、小網站沒有必要一般不會用;
HTTpS連接緩存不如HTTp高效,大流量網站如非必要也不會采用,流量成本太高;
HTTpS連接服務器端資源占用高很多,支持訪客稍多的網站需要投入更大的成本,如果全部采用HTTpS,基于大部分計算資源閑置的假設的VpS的平均成本會上去;
HTTpS協議握手階段比較費時,對網站的相應速度有負面影響,如非必要,沒有理由犧牲用戶體驗。
三、支持HTTpS的方式
增加HTTpS的支持需要在nginx或者tomcat上增加證書(證書需要ops來購買),兩種方法只需要選用其中一種。我們選擇了通過nginx配置證書的方式來做HTTpS支持的事情。原因是這種方式可以通過ops統一配置證書,不需要在每臺服務器上依次配置HTTpS證書,能提升配置效率。
通過tomcat配置證書
在開發環境里時,需要自己來生成證書:1、生成證書;2、找到java的目錄;3、生成一個證書。
keytool -v-genkey -alias tomcat -keyalg RSA -keystore ~/keystore
記住生成證書時的密碼
在tomcat的conf/server.xml 配置里增加connector
譬如,我的是server.xml
<Connector port="8443"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="true" disableUploadTimeout="true"
acceptCount="100" debug="0" scheme="https" secure="true"
clientAuth="false" sslprotocol="TLS"
keystorepass="121212"---- 這個是您當時的密碼
SSLEnabled="true"
keystoreFile="/home/q/keystore" -- 這個您第二步時,生成證書的地址
/>
使用這種方法,直接用request.getSchmeme()能夠看到https
通過nginx配置證書
在已經購買好證書的前提下,可以通過以下方式配置證書。
nginx配置
server {
listen 443;
server_name dujia.qunar.com;
charset utf8;
gzip off;
ssl on;
ssl_certificate/home/q/nginx/ssl/server.crt;
ssl_certificate_key/home/q/nginx/ssl/server.key;
if ( $request_method !~ GET|pOST|HEAD ) {
return 403;
}
proxy_set_header Host "dujia.qunar.com";
proxy_set_header X-Real-Ip$remote_addr;
proxy_set_header X-Forwarded-For$proxy_add_x_forwarded_for;
proxy_set_header dj-sch "https";
proxy_set_header X-Real-Scheme $scheme;
location / {
proxy_pass http://127.0.0.1:80;
#proxy_pass http://p.tuan.qunar.com;
}
}
在java中通過X-Real-Scheme或dj-sch獲取當前協議
SchemeUtil.java
private static String HTTpS_HEADER = "X-Real-Scheme";
private static String HTTpS_SCHEME = "https";
private static String HTTp_SCHEME = "http";
public static String getScheme(HttpServletRequest request){
String scheme = request.getHeader(HTTpS_HEADER);
if(scheme != null &&scheme.equals(HTTpS_SCHEME)){
return HTTpS_SCHEME;
}else {
return HTTp_SCHEME;
}
}
四、代碼涉及的改動
頁面請求的靜態資源
js && css
后臺將jsp中域名為http://*.quanrzz.com的js,css鏈接改為 //*.qunarzz.com
圖片
將jsp和java工程中給出的圖片url進行修改(原因是當前實用的圖片服務器不能同時支持http和https),圖片的http和https域名對應關系如下:
接口
內部接口:修改接口返回的url,統一格式為://xxx.xx.xx/;
圖片url會根據服務請求端的協議做自適應,比如:用戶以https協議請求服務,接口返回的圖片url對應的協議也是https。圖片url不以“//xxx.xx.xx/”形式返回的原因是android和ios默認不支持展示不帶協議的圖片。
外部接口:當調用其他業務線的一些接口不支持https時,我們的處理方式是通過代理接口來調用這些外部接口。
五、遇到的問題及處理方案
nginx上對443端口的請求在header里添加https標記,需要和后端保證一致;
用戶中心個別的css和js在https環境下需要在引入時標記css/js=ssl;
同一個域名下面,部分內部調用的接口,是不需要支持https的,因此在做nginx轉發的時候,需要針對這些uri做特殊處理。
上一篇:
暫無信息上一篇:
澄邁網絡推廣:提升業務效益的關鍵更多新聞
2019
https大大改善了網站的安全性,減少了流量劫持,越安全的網站對用戶越有益。即便是https改造有些難度,也應當大力推進https的改造。下面我們特邀了去哪網的同學進行了關于https改
View details
2023
澄邁網絡推廣可以提升企業的品牌知名度。通過在搜索引擎排名靠前的位置上顯示,以及在社交媒體、博客和其他在線資源上積極參與,企業可以增加品牌的曝光度,吸引更多的目標受眾。
View details